#ifndef DSTREE_H
#define DSTREE_H
#include "trainData.h"

class dsTree;

class decreAttri
{
public:
    char value[50];
    dsTree* nextNode;
};

class continAttri
{
public:
    double value;
    dsTree *smallNode, *bigNode;
};


class keySign
{
public:
    int keyNum;
    char key[20];
    int sign;       //标记，0 未使用， 1 已使用
    keySign* nextKey;

    keySign();
    int addKey(char* k, int s = 0);
    int setKey(char* k, int s);
};

class dsTree
{
private:
    int isNum;      //0 离散， 1 连续， -1 未初始化， 2 树头节点
    char key[30];   //键
    decreAttri* dAttri;     //离散分类
    int dAttriNum;          //离散分类的数量
    continAttri* cAttri;    //连续分类
    dsTree* head;           //作为头节点时指向树的顶点

public:
    dsTree();
    int testTree(valueItem* testItem, char* result);    //输入测试数据，直接输出结果到result
    dsTree* deciItem(valueItem* testItem);      //接受一个数据，返回指定的树的下一个节点的指针
    int creatTree(trainData* td);                //用训练数据生成一颗决策树
    int setNode(dataChosen* dc, keySign* ks);        //用数据设置数的一个节点
};

#endif // DSTREE_H
